const express=require('express')
const router=express.Router()
const {songModel}=require('../model/songModel')
/* 
    查询所有的歌曲
*/
router.get('/getAllSong',async(req,res)=>{
    console.log('=========查询所有的歌曲==========='); 
    const result=await songModel.find()
    if(result.length>0){
        res.send({
            code:1,
            rows:result
        })
    }
})
/* 
    增加歌曲
*/
router.post('/addSong',async(req,res)=>{
    try{
        /* 
            mongoose中增加方法
            模型对象.create(参数)
            参数：增加的对象
        */
        const result=await songModel.create(req.body)
        res.send({
            code:1,
            message:'歌曲增加成功'
        })
    }catch(err){
        res.send({
            code:0,
            message:'歌曲增加失败'
        }) 
    }
})
/* 
    删除歌曲
*/
router.delete('/delSong/:sid',async(req,res)=>{
    const {sid}=req.params
    try{
        /* 
            模型对象.deleteOne(参数)
            参数：删除的条件
        */
        const {deletedCount}=await songModel.deleteOne({sid})
        if(deletedCount){
            res.send({
               code:1,
               message:'歌曲删除成功'
            })
        }else{
            res.send({
                code:0,
                message:'歌曲删除失败'
            }) 
        }
    }catch(err){
        res.send({
            code:-1,
            message:'出现异常'
        })
    }
})

/* 

    修改歌曲
*/
router.put('/modifySong',async(req,res)=>{
   try{
    /* 
    
        模型对象.updateOne(参数1，参数2)
        参数1：修改的条件
        参数2：要修改的对象，除了条件之外的字段，都可以修改

    */
     const {modifiedCount}=await songModel.updateOne({sid:req.body.sid},req.body)
     if(modifiedCount){
        res.send({
            code:1,
            message:'修改成功'
        })
     }else{
        res.send({
            code:0,
            message:'修改失败'
        })
     }
   }catch(err){
     res.send({
        code:-1,
        message:"异常出现"
     })
   }
   
})

/* 
    按ID查询一条记录
    mongoose有如下三个方法
    find():以数组的形式来返回的，参数JS对象对象
    findById():以对象的形式返回，并且参数必须是mongodb中_id值
    findOne():以对象形式返回，参数JS对象
*/
router.get('/getSongById/:sid',async(req,res)=>{
    //const result=await songModel.find({sid:req.params.sid})
    //const result=await songModel.findById(req.params._id)
    const result=await songModel.findOne({sid:req.params.sid}).populate("showList")
    if(result){
        res.send({
            code:1,
            message:'查询成功',
            data:result
        })
    }else{
        res.send({
            code:0,
            message:'查询失败'
        })
    }
})

/* 

    模糊查询
*/
router.get('/searchSong',async(req,res)=>{
    const result=await songModel.find({sname:{$regex:req.query.sname}})
    if(result.length>0){
        res.send({
            code:1,
            message:'查询成功',
            data:result
        })
    }else{
        res.send({
            code:1,
            message:'查询失败'
        })
    }
})
/* 
  搜索音乐播放量超过5的
*/
router.get('/searchSong1',async(req,res)=>{
    const result=await songModel.find({playnum:{$gte:req.query.playnum}})
    console.log(result);
})

/* 
    删除多条记录
*/
router.delete('/delMany',async(req,res)=>{
    // const {deletedCount}=await songModel.deleteMany({playnum:{$gte:req.query.playnum}})
    const {deletedCount}=await songModel.deleteMany({sid:{$in:['1001','1002']}})
     if(deletedCount){
            res.send({
               code:1,
               message:'歌曲删除成功'
            })
        }else{
            res.send({
                code:0,
                message:'歌曲删除失败'
            }) 
        }
})

/* 
    分页操作
*/
router.get('/getSongByPage',async(req,res)=>{
    //后端获取前端发送的当前页和每页显示的记录数
    const {currentPage=1,pageSize=5}=req.query
    console.log('当前页',currentPage);
    console.log('每页的记录数',pageSize);
    //计算每页的起始位置=(当前页-1)*每页的记录数
    let start=(currentPage-1)*pageSize
    /* 
        skip(每页的开始位置)
        limit(每页的记录数)
    */
    let rows=await songModel.find().populate("songtypeId").skip(start).limit(pageSize) //按分页查询
    let total=await songModel.countDocuments() //获取总记录数
    let pages=total%pageSize==0?parseInt(total/pageSize):parseInt(total/pageSize)+1
    res.send({
        code:1,
        data:{
            total,
            pages,
            rows,
            currentPage
        }
    })
})


module.exports=router